package com.spzx.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.spzx.product.api.domain.*;
import com.spzx.product.api.domain.Product;

import java.util.List;
import java.util.Map;

/**
 * ClassName: IProductService
 * Package: com.spzx.product.service
 * Description:
 *
 * @Author ycy
 * @Create 2024/8/9 16:17
 * @Version 1.0
 */
public interface IProductService extends IService<Product> {
    List<ProductSku> getTopSale();

    List<ProductSku> selectProductSkuList(SkuQuery skuQuery);

    ProductSku getProductSku(Long skuId);

    Product getProduct(Long id);

    SkuPrice getSkuPrice(Long skuId);

    ProductDetails getProductDetails(Long id);

    Map<String,Long> getSkuSpecValue(Long id);

    SkuStockVo getSkuStock(Long skuId);

    void updateStatus(Long id, Integer status);

    int updateProduct(Product product);

    List<SkuPrice> getSkuPriceList(List<Long> skuIdList);

    String checkAndLock(String orderNo, List<SkuLockVo> skuLockVoList);

    void unlock(String orderNo);

    void minus(String orderNo);

    /**
     * 查询商品列表
     *
     * @param product 商品
     * @return 商品集合
     */
    public List<Product> selectProductList(Product product);

    /**
     * 新增商品
     * @param product
     * @return
     */
    public int insertProduct(Product product);

    /**
     * 查询商品
     *
     * @param id 商品主键
     * @return 商品
     */
    public Product selectProductById(Long id);

    /**
     * 批量删除商品
     *
     * @param ids 需要删除的商品主键集合
     * @return 结果
     */
    public int deleteProductByIds(Long[] ids);

    void updateAuditStatus(Long id, Integer auditStatus);
}
